#include <stdio.h>

int main(int argc, char const *argv[])
{
    
    // 定义一个拥有5个元素的数组
    int arr [5] = {1,2,3,4,5} ;
    // 随后定义一个整形数据
    // (假设Num分配的地址紧跟在数组后方)
    int Num   = 666 ;

    // 让指针key指向了数组首个元素的地址
    // 也可以写成:int * ptr = arr ;
    int * key = &arr[0] ;

    // 通过指针key偏移5个元素
    // 实际上访问的是第六个元素
    // 第六个元素已经超出数组的合法空间
    // 这里我们假设Num变量的内存跟在该数组后方
    // 因此实际上该操作依然是合法的
    // 并不会引发段错误
    *(key+5) =  9527 ;

    // 此时再访问Num的数据则会发现原来的666
    // 被key 修改为了9527
    // 如果项目足够庞大，这种问题很难被察觉
    printf("Num:%d\n" , Num);

    

    return 0;
}
